package controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.RequestService;

public class Request1Controller implements Controller{
/*
 * 여기서는 FrontController에서 넘어온 request와 response를 가지고 적절한 처리를 한다. 
 */
	@Override
	public AttributeAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		//요청 1을 처리할 컨트롤러 로직
		//컨트롤러 로직의 역할이란?
		//1. 요청 파라미터 조회
		//넘어온 request객체에서 client가 입력한 vlaue1값을 읽어서 스트링에 저장하고 
		String value1 = request.getParameter("value1");
		//그것을 콘솔창에 찍어준다.
		System.out.println("Request1Controller : value1 =" + value1);
		//2. Business 로직 처리 - Model 호출
		//비즈니스 로직을 처리해줄 RequestService 클래스의 객체를 받아와서
		RequestService service = RequestService.getInstance();
		
		String result = service.handleRequest1();
		//3. 처리결과 응답
		request.setAttribute("result", result);
		/*
		 * 비즈니스 로직을 끝내고 결과를 리퀘스트 스콥에 set하면 그것을 AttributeAndView 타입으로 리턴한다. 
		 * 이때 Request1Controller는 두가지 값을 전달하는데 그 중 첫번째는 이 요청에 대한 응답방식이고
		 * 두번째는 이 요청에 대한 뷰를 처리해줄 경로다. 
		 * 이 둘은 반드시 컨트롤러가 로직을 처리하고 반환해야 하는 값이기 때문에 애초에 이 컨트롤러를 만들때 리턴타입을 AttributeAndView로 만들어 준것이다.
		 * 그리고 AttributeAndView를 컨트롤러의 임플리먼트 타입에서 정의한 것도 그 이유다. 
		 * 모든 컨트롤러는 결과값에 대한 속성과 요청을 돌려줄 응답에 대한 View를 정의해줘야 했기 때문이다. 
		 */
		return new AttributeAndView(false, "/view/response/response1.jsp");
	}

}
